package lib

import (
	"github.com/go-redis/redis"
	"gopkg.in/yaml.v2"
	"io/ioutil"
	"log"
	"os"
	db "tacitus/library/database"
	serv "tacitus/library/services"
)

// 配置文件所在路径
var ConfigFile = "file/config/main.yaml"

// 配置的格式
type ConfigSet struct {
	// 开发时的选项
	Develop struct{
		Sync bool `yaml:"sync"` // 同步数据结构或者写入默认数据
		Print bool `yaml:"print"` // 打印错误信息
	} `yaml:"develop"`

	// 数据库配置
	DataBase map[string]db.DataBaseConfig `yaml:"database"`

	// Redis配置
	Redis struct{
		Network string `yaml:"network"`
		Addr string `yaml:"addr"`
		Password string `yaml:"password"`
		DB int `yaml:"db"`
	} `json:"redis"`

	// 端口设置
	Port map[string]string `yaml:"port"`
}

// 已经被读取到的配置
var Config ConfigSet

var Redis *redis.Client
var DebugLog *os.File // echo和接口产生的debug日志
var WorkLogger *log.Logger // 后台运行的任务的日志

func init() {
	var err error
	data, err := ioutil.ReadFile(ConfigFile)
	if err != nil {
		panic("系统配置文件未找到！\r\npath:"+ConfigFile)
	}
	if err = yaml.Unmarshal(data, &Config); err != nil {
		panic("系统配置文件读取失败！\r\n"+err.Error())
	}

	db.DataBaseConfigs = Config.DataBase
	db.LogFile, err = os.OpenFile("file/runtime/db.log", os.O_APPEND|os.O_CREATE, 0777)
	if err != nil {
		panic(err)
	}

	DebugLog, err = os.OpenFile("file/runtime/debug.log", os.O_APPEND|os.O_CREATE, 0777)
	if err != nil {
		panic(err)
	}

	if file, err := os.OpenFile("file/runtime/work.log", os.O_APPEND|os.O_CREATE, 0777); err != nil {
		panic(err)
	} else {
		WorkLogger = log.New(file, "", log.Llongfile|log.LstdFlags)
	}

	Redis = redis.NewClient(&redis.Options{
		Network:  Config.Redis.Network,
		Addr:     Config.Redis.Addr,
		Password: Config.Redis.Password,
		DB:       Config.Redis.DB,
	})
	serv.Redis = Redis
}